linux之排序sort命令详解 | 您所在的位置:网站首页 › awk去重 保留第一行 › linux之排序sort命令详解 |
linux之排序sort命令
sort排序规则:
以行为单位,每一行作为一个字符串按照字符串的比较规则,首字母开始依次向后按ASCII码值进行比较结果默认升序输出
1. 简单排序 [root@linuxforliuhj test]# cat test.txt aaa:cde bbb:dse ccc:123 abc:rew acb:1we 111:fdf 222:esa 333:iud [root@linuxforliuhj test]# sort test.txt 111:fdf 222:esa 333:iud aaa:cde abc:rew acb:1we bbb:dse ccc:123使用sort进行简单排序,首字母开始依次进行比较。 2. 排序后去除重复的行,使用参数-u(unique) [root@linuxforliuhj test]# cat test.txt aaa:cde aaa:cde bbb:dse ccc:123 abc:rew abc:rew abc:rew acb:1we 111:fdf 222:esa 333:iud [root@linuxforliuhj test]# sort -u test.txt 111:fdf 222:esa 333:iud aaa:cde abc:rew acb:1we bbb:dse ccc:123排序后将重复的行aaa:cde和abc:rew去重只保留一行。 3.默认排序为升序排序,使用参数-r进行降序排序 [root@linuxforliuhj test]# cat test.txt aaa:cde aaa:cde bbb:dse ccc:123 abc:rew abc:rew abc:rew acb:1we 111:fdf 222:esa 333:iud [root@linuxforliuhj test]# sort -u -r test.txt ccc:123 bbb:dse acb:1we abc:rew aaa:cde 333:iud 222:esa 111:fdf进行降序排序,同时去除重复项。 4.将排序结果输出到指定文件,使用参数-o(out) [root@linuxforliuhj test]# sort -u -r test.txt -o /test/test_1.txt [root@linuxforliuhj test]# cat test_1.txt ccc:123 bbb:dse acb:1we abc:rew aaa:cde 333:iud 222:esa 111:fdf将排序的结果输出到文件test_1.txt文件中,如果输出文件不存在会自动创建。同时也可以使用重定向符号进行输出。 [root@linuxforliuhj test]# sort -u -r test.txt > /test/test_2.txt [root@linuxforliuhj test]# cat test_2.txt ccc:123 bbb:dse acb:1we abc:rew aaa:cde 333:iud 222:esa 111:fdf参数-o和重定向符号的唯一区别: 当使用重定向符号将排序结果重定向输出回源文件进行覆盖时,会出错,源文件会被清空。 当使用-o参数时,则能够正常覆盖回源文件。 [root@linuxforliuhj test]# sort -u -r test.txt > /test/test.txt [root@linuxforliuhj test]# ll -d /test/test.txt -rw-r--r--. 1 root root 0 Oct 25 20:06 /test/test.txt [root@linuxforliuhj test]# cat test.txt [root@linuxforliuhj test]# [root@linuxforliuhj test]# sort -u -r test.txt -o /test/test.txt [root@linuxforliuhj test]# cat test.txt ccc:123 bbb:dse acb:1we abc:rew aaa:cde 333:iud 222:esa 111:fdf [root@linuxforliuhj test]#5.以数值进行比较,而并非字符串,使用参数-n(number) [root@linuxforliuhj test]# cat test_n.txt 12322 54 735 9 [root@linuxforliuhj test]# [root@linuxforliuhj test]# sort test_n.txt 12322 54 735 9 [root@linuxforliuhj test]# sort -n test_n.txt 9 54 735 12322未使用-n参数则从首字母开始依次进行排序;使用-n参数后则按照数值进行排序;此参数只适用于纯数字字符串。 6.将每一行按照指定字符分割以后,选择其中的某一列进行排序,使用-t参数指定分割符,使用-k参数指定按照分割后的哪一列进行排序。 [root@linuxforliuhj test]# cat test.txt asd:34w:dsw ccc:123:343 bbb:123:dfe aab:1we:hiu abc:lwe:htt aaa:cde:lpu 333:esa:qas 222:esa:ase 111:fdf:cxs以:分割每一行并按照第1列进行排序 [root@linuxforliuhj test]# sort -t ':' -k 1 test.txt 111:fdf:cxs 222:esa:ase 333:esa:qas aaa:cde:lpu aab:1we:hiu abc:lwe:htt asd:34w:dsw bbb:123:dfe ccc:123:343以:分割每一行并按照第2列进行排序 [root@linuxforliuhj test]# sort -t ':' -k 2 test.txt ccc:123:343 bbb:123:dfe aab:1we:hiu asd:34w:dsw aaa:cde:lpu 222:esa:ase 333:esa:qas 111:fdf:cxs abc:lwe:htt以:分割每一行并按照第3列进行排序 [root@linuxforliuhj test]# sort -t ':' -k 3 test.txt ccc:123:343 222:esa:ase 111:fdf:cxs bbb:123:dfe asd:34w:dsw aab:1we:hiu abc:lwe:htt aaa:cde:lpu 333:esa:qas7.sort命令适用于管道符 [root@linuxforliuhj test]# cat test.txt ccccc bdsdsad adsfwe gdgsdf we w dsafswqeqw jhhtyty [root@linuxforliuhj test]# cat test.txt | sort adsfwe bdsdsad ccccc dsafswqeqw gdgsdf jhhtyty w we [root@linuxforliuhj test]# cat test.txt | sort -r we w jhhtyty gdgsdf dsafswqeqw ccccc bdsdsad adsfwe [root@linuxforliuhj test]#8.注意 注意: 【1】sort还有一些其他的不常用的参数,例如-f,-b , -c, -C等 【2】sort默认是使用-b参数的,即默认删除每一行之前的空格,从第一个非空格数据开始比较 [root@linuxforliuhj test]# cat te.txt hello this is hello this is hellothis is hello this a [root@linuxforliuhj test]# sort te.txt hello this a hello this is hello this is hellothis is可以看出默认的sort命令忽略每一行第一个字符之前的空格,而并非整行所有的空格! 9.忽略大小写参数-f引发的奇怪现象 [root@linuxforliuhj test]# cat hello.sh A a B b d D e E [root@linuxforliuhj test]# sort hello.sh a A b B d D e E [root@linuxforliuhj test]# sort -f hello.sh A a B b D d E e目前查了很多资料还不清楚具体是什么原因,所以尽量不要用-f参数,可以使用tr等命令进行大小写替换后再排序! |
CopyRight 2018-2019 实验室设备网 版权所有 |